package com.bestcem.xm.user.dao.mapper;


import com.bestcem.xm.user.entity.mysql.UserGroupLevel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 层级 mapper
 *
 * @author wangyunyun <yunyun.wang@idiaoyan.com>
 * @version v1.0
 * @date 2022/1/4 10:30
 */
@Mapper
public interface UserGroupLevelMapper {

    /**
     * 通过id集合删除层级
     *
     * @param ids
     * @return Integer
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/3/31 11:25
     */
    Integer deleteByPrimaryKeys(List<String> ids);

    /**
     * 通过id删除层级
     *
     * @param groupLevelId 层级id
     * @return int
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/3/31 11:53
     */
    int deleteByPrimaryKey(String groupLevelId);

    /**
     * 新增层级
     *
     * @param param 层级新增参数
     * @return int
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/3/31 11:53
     */
    int insertSelective(UserGroupLevel param);

    /**
     * 通过id更新层级
     *
     * @param param 层级更新参数
     * @return int
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/3/31 11:54
     */
    int updateByPrimaryKeySelective(UserGroupLevel param);

    /**
     * 批量更新
     *
     * @param groupLevels 层级列表
     * @return int
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/4/11 0:47
     */
    int updateBatch(List<UserGroupLevel> groupLevels);

    /**
     * 更新层级 level_children_id可以为null
     *
     * @param level 层级数据
     * @return java.lang.Integer
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/04/02 18:24
     */
    int updateLevelByPrimaryKey(UserGroupLevel level);

    /**
     * 通过条件更新层级
     *
     * @param cond  更新条件
     * @param param 更新参数
     * @return int
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/3/31 11:36
     */
    int updateBySelective(UserGroupLevel cond, UserGroupLevel param);

    /**
     * 通过条件查询层级
     *
     * @param param
     * @return List<UserGroupLevel>
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/3/31 11:35
     */
    List<UserGroupLevel> selectBySelective(UserGroupLevel param);

    /**
     * 通过id集合查询层级
     *
     * @param ids
     * @return List<UserGroupLevel>
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/3/31 11:36
     */
    List<UserGroupLevel> listByIds(List<String> ids);

    /**
     * 通过id查询层级
     *
     * @param groupLevelId 层级id
     * @return UserGroupLevel
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/3/31 13:54
     */
    UserGroupLevel selectByPrimaryKey(String groupLevelId);

    /**
     * 根据公司id获取层级信息并根据level_num排序
     *
     * @param orgId 组织id
     * @return java.util.List<com.bestcem.xm.user.entity.pojo.UserGroupLevelDO>
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/04/02 18:26
     */
    List<UserGroupLevel> getGroupLevelByOrgId(String orgId);

    /**
     * 根据groupId查询它所在层级的levelNum
     *
     * @param groupId 组织id
     * @return com.bestcem.xm.util.ServiceResult<com.bestcem.xm.user.group.service.dto.group.UserGroupLevelDTO>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/2/16 11:19
     */
    Integer getLevelNumByIdJoinLevel(String groupId);

    /**
     * 根据公司id和层级名称查询层级信息
     *
     * @param orgId          公司id
     * @param groupLevelName 层级名称
     * @return com.bestcem.xm.user.entity.mysql.UserGroupLevel
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/04/08 14:07
     */
    UserGroupLevel getGroupByOrgIdAndName(@Param("orgId") String orgId, @Param("groupLevelName") String groupLevelName);

    /**
     * 查询父组织Id
     *
     * @param  levelId        组织层级Id
     * @return parentLevelId  父组织层级Id
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date   2022/02/08 20:38
     */
    String getParentLevelId(@Param("levelId") String levelId);

}
